package com.pb.wkflow.api.mapper;

import com.pb.wkflow.api.entity.WfSysJsonXmlEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 流程设计图 json
 * @author 苗益辉
 * @date 2022/9/13 16:54
 */
@Mapper
@Repository
public interface WfSysJsonXmlMapper {

    /**
     * 新增
     * @param entity 实体类
     */
    void insert(WfSysJsonXmlEntity entity);

    /**
     * 列表查询
     * @param entity 实体类
     * @return List<WfSysJsonXmlEntity>
     */
    List<WfSysJsonXmlEntity> selectList(WfSysJsonXmlEntity entity);

    /**
     * 查询未部署的流程图
     * @param entity 实体类
     * @return WfSysJsonXmlEntity
     */
    WfSysJsonXmlEntity selectUnDeploy(WfSysJsonXmlEntity entity);

    /**
     * 根据主键查询
     * @param id id
     * @return WfSysJsonXmlEntity
     */
    WfSysJsonXmlEntity selectById(@Param("id") String id);

    /**
     * 保存流程图
     * @param entity 实体类
     */
    void updateJson(WfSysJsonXmlEntity entity);

    /**
     * 部署流程图
     * @param entity 实体类
     */
    void deploy(WfSysJsonXmlEntity entity);

    /**
     * 保存并部署流程图
     * @param entity 实体类
     */
    void updateAndDeploy(WfSysJsonXmlEntity entity);

    /**
     * 根据version 查询 流程图
     * @param entity 实体类
     * @return WfSysClassifyEntity
     */
    WfSysJsonXmlEntity selectByVersion(WfSysJsonXmlEntity entity);

    /**
     * 删除json
     * @param procDefKey procDefKey
     */
    void deleteJson(@Param("procDefKey") String procDefKey, @Param("tenantId") String tenantId);

    /**
     * 查询使用中的流程定义
     * @param procDefKey procDefKey
     * @param tenantId tenantId
     * @return WfSysJsonXmlEntity
     */
    List<WfSysJsonXmlEntity> selectUsedByProcDefKey(@Param("procDefKey") String procDefKey,
                                                    @Param("tenantId") String tenantId);

    /**
     * 更新不使用
     * @param procDefKey procDefKey
     * @param tenantId tenantId
     */
    void updateUnUseByProcDefKey(@Param("procDefKey") String procDefKey,
                                 @Param("tenantId") String tenantId);

    /**
     * 修改流程版本
     * @param procDefId procDefId
     * @param description description
     */
    void updateDescription(@Param("procDefId") String procDefId, @Param("description") String description);

    /**
     * 更新使用
     * @param procDefId procDefKey
     */
    void updateUseByProcDefId(@Param("procDefId") String procDefId);

    /**
     * 查询所有已启用的版本
     * @param tenantId tenantId
     * @return List<WfSysJsonXmlEntity>
     */
    List<WfSysJsonXmlEntity> selectAllUsed(@Param("tenantId") String tenantId, @Param("procDefKeys") List<String> procDefKeys);

    /**
     * 查询已经部署的最大版本
     * @param tenantId tenantId
     * @return List<WfSysJsonXmlEntity>
     */
    List<WfSysJsonXmlEntity> selectAllMaxVersion(@Param("tenantId") String tenantId, @Param("procDefKeys") List<String> procDefKeys);
}
